package com.atguigu.userprofile.mapper;

import com.atguigu.userprofile.bean.UserGroup;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Service;

import javax.ws.rs.DELETE;
import java.util.List;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhangchen
 * @since 2021-05-04
 */

// MybatisPlus技术
@Mapper
@DS("mysql")
public interface UserGroupMapper extends BaseMapper<UserGroup> {

    //为了省事，不编写xml文件填写sql，直接使用注解。
    //目前这个项目的风格，都是使用注解
    @Insert("insert into user_group select #{id}, ${sql} ")
    @DS("ck")
    void saveUserGroupToCK(@Param("id") String groupId,@Param("sql") String bitmapAndSql);



    /*
            查询ck中已经保存的分群信息
                用什么形式保存分群信息?
                        ck                  java                 redis
                    [1,2,3,4,5]  ----->     List[String]   ------------->   ?


            ORM的映射规则是， 一行只能封装为一个Bean! 只有N行才能封装为List<Bean>
     */
    @Select("select arrayJoin(bitmapToArray(us)) from user_group where user_group_id = #{id}; ")
    @DS("ck")
    @Deprecated
    List<String> queryUserGroupFromCK(@Param("id") String groupId);

    @Select("select bitmapCardinality(${sql}) ")
    @DS("ck")
    Long evaluateUserGroupNum(@Param("sql") String bitmapAndSql);


    @Delete("alter table user_group delete where user_group_id = #{id}")
    @DS("ck")
    void deleteUserGroupById(String id);


    //用于直接计算当前分区包的 用户列表
    // us不是从表中查询了，而是直接拼接  bitmapAndsql计算出来
    @DS("ck")
    @Select("select arrayJoin(bitmapToArray( ${sql} ))  ")
    List<String> calUserGroupFromCK(@Param("sql") String calSql);


}
